package com.run2code;

import org.junit.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式测试类
 * 关注公众号【奔跑的码畜】，一起进步不迷路
 *
 * @author 第七人格
 * @date 2023/10/13
 */
public class PatternTestDemo {
    /**
     * 这个正则表达式的含义为：
     * 匹配一个包含在花括号中的字符串，其中花括号中可以包含任意数量的空白字符（包括空格、制表符、换行符等），
     * 并且花括号中至少包含一个单词字符（字母、数字或下划线）。
     * =================================================
     * 具体来说，该正则表达式由两部分组成：
     * {s*(\w*)\s*}：表示匹配一个左花括号，后面跟随零个或多个空白字符，然后是一个单词字符（字母、数字或下划线）零个或多个空白字符，最后是一个右花括号。这部分用括号括起来，以便提取匹配到的内容。
     * (.*?)：表示匹配任意数量的任意字符，但尽可能少地匹配。这部分用括号括起来，以便提取匹配到的内容。
     * =================================================
     * 因此，整个正则表达式的意思是：
     * 匹配一个包含在花括号中的字符串，
     * 其中花括号中可以包含任意数量的空白字符（包括空格、制表符、换行符等），
     * 并且花括号中至少包含一个单词字符（字母、数字或下划线），并提取出花括号中的内容。
     * =================================================
     */
    private static final Pattern PATTERN = Pattern.compile("\\{\\s*(\\w*)\\s*\\{(.*?)}}");

    @Test
    public void test() {
        // 1、参数解析
        String template = "{{#request.activityId}}";
        Matcher matcher = PATTERN.matcher(template);
        while (matcher.find()) {
            String paramName = matcher.group(2);
            System.out.println("paramName：" + paramName);
        }
        // 2、自定义函数解析
        String customFunctionTemplate = "{getNameById{#id}}";
        Matcher customFunctionMatcher = PATTERN.matcher(customFunctionTemplate);
        while (customFunctionMatcher.find()) {
            String paramName = customFunctionMatcher.group(2);
            String funcName = customFunctionMatcher.group(1);
            System.out.println("paramName：" + paramName);
            System.out.println("funcName：" + funcName);
        }

    }

}
